#ifndef __ledmatrixglyphs_c__
#define __ledmatrixglyphs_c__

#include "ledmatrixglyphs.h"
#include "bitsformatted.h"

#define GLYPH_OFFSET 0x18

unsigned char glyphs[108][5] = 
{
	{ _______,
	  _______,
	  _______,
	  _______,
	  _______, }, // 

	{ ___X___,
	  __XXX__,
	  ___X___,
	  _______,
	  _______, }, // 19

	{ _______,
	  _______,
	  _X_____,
	  XXX____,
	  _X_____, }, // 1A

	{ ___X___,
	  __XXX__,
	  _X_X___,
	  XXX____,
	  _X_____, }, // 1B

	{ _______,
	  _______,
	  _____X_,
	  ____XXX,
	  _____X_, }, // 1C
	
	{ ___X___,
	  __XXX__,
	  ___X_X_,
	  ____XXX,
	  _____X_, }, // 1D

	{ _______,
	  _______,
	  _X___X_,
	  XXX_XXX,
	  _X___X_, }, // 1E

	{ ___X___,
	  __XXX__,
	  _X_X_X_,
	  XXX_XXX,
	  _X___X_, }, // 1F

	//------------------------------------------
	//------------------------------------------

	{ _______,
	  _______,
	  _______,
	  _______,
	  _______, }, // space : 0x20

	{ _______,
	  _______,
	  X__XXXX,
	  _______,
	  _______, }, // ! : 0x21

	{ _______,
	  _____XX,
	  _______,
	  _____XX,
	  _______, }, // " : 0x22

	{ __X_X__,
	  XXXXXXX,
	  __X_X__,
	  XXXXXXX,
	  __X_X__, }, // # : 0x23

	{ _X__X__,
	  _X_X_X_,
	  XXXXXXX,
	  _X_X_X_,
	  __X__X_, }, // $ : 0x24

	{ _X___XX,
	  __X__XX,
	  ___X___,
	  XX__X__,
	  XX___X_, }, // % : 0x25

	{ _XX____,
	  X__XXXX,
	  X_X_X_X,
	  XX___XX,
	  _XX____, }, // & : 0x26

	{ _______,
	  _______,
	  _____XX,
	  _______,
	  _______, }, // ' : 0x27

	{ _______,
	  _______,
	  __XXX__,
	  _X___X_,
	  X_____X, }, // ( : 0x28

	{ X_____X,
	  _X___X_,
	  __XXX__,
	  _______,
	  _______, }, // ) : 0x29

	{ __XXX__,
	  ___X___,
	  _XXXXX_,
	  ___X___,
	  __XXX__, }, // * : 0x2A

    { ___X___,
      ___X___,
      _XXXXX_,
      ___X___,
      ___X___, }, // + : 0x2B

    { _______,
	  _______,
	  X______,
	  _X_____,
	  _______, }, // , : 0x2C

    { _______,
	  ___X___,
	  ___X___,
	  ___X___,
	  _______, }, // - : 0x2D

	{ _______,
	  _______,
	  XX_____,
	  _______,
	  _______, }, // . : 0x2E

    { _X_____,
	  __X____,
	  ___X___,
	  ____X__,
	  _____X_, }, // / : 0x2F

	{ _XXXXX_,
	  X_X___X,
	  X__X__X,
	  X___X_X,
	  _XXXXX_, }, // 0 : 0x30

	{ _______,
	  X____X_,
	  XXXXXXX,
	  X______,
	  _______, }, // 1 : 0x31

	{ XX___X_,
	  X_X___X,
	  X__X__X,
	  X__X__X,
	  X___XX_, }, // 2 : 0x32

	{ _X___X_,
	  X__X__X,
	  X__X__X,
	  X__X__X,
	  _XX_XX_, }, // 3 : 0x33

	{ ___XX__,
	  ___X_XX,
	  ___X___,
	  ___X___,
	  XXXXXXX, }, // 4 : 0x34

	{ _X_XX__,
	  X__X_XX,
	  X__X__X,
	  X__X__X,
	  _XX___X, }, // 5 : 0x35

	{ _XXXXX_,
	  X__X__X,
	  X__X__X,
	  X__X__X,
	  _XX__X_, }, // 6 : 0x36

	{ _____XX,
	  ______X,
	  XXX___X,
	  ___X__X,
	  ____XXX, }, // 7 : 0x37

	{ _XX_XX_,
	  X__X__X,
	  X__X__X,
	  X__X__X,
	  _XX_XX_, }, // 8 : 0x38

	{ _X__XX_,
	  X__X__X,
	  X__X__X,
	  X__X__X,
	  _XXXXX_, }, // 9 : 0x39

	{ _______,
	  _______,
	  _XX_XX_,
	  _______,
	  _______, }, // : : 0x3A

	{ _______,
	  X______,
	  _X__XX_,
	  _______,
	  _______, }, // ; : 0x3B

	{ _______,
	  ___X___,
	  __X_X__,
	  _X___X_,
	  X_____X, }, // < : 0x3C

	{ __X_X__,
	  __X_X__,
	  __X_X__,
	  __X_X__,
	  __X_X__, }, // = : 0x3D

	{ X_____X,
	  _X___X_,
	  __X_X__,
	  ___X___,
	  _______, }, // > : 0x3E

	{ _____X_,
	  ______X,
	  X_XX__X,
	  ____X_X,
	  _____X_, }, // ? : 0x3F

	{ _XXXXX_,
	  X_____X,
	  X_XXX_X,
	  X_X___X,
	  X_XXXX_, }, // @ : 0x40

	{ XXXXX__,
	  ___X_X_,
	  ___X__X,
	  ___X_X_,
	  XXXXX__, }, // A : 0x41

	{ XXXXXXX,
	  X__X__X,
	  X__X__X,
	  X__X__X,
	  _XX_XX_, }, // B : 0x42

	{ _XXXXX_,
	  X_____X,
	  X_____X,
	  X_____X,
	  _X___X_, }, // C : 0x43

	{ XXXXXXX,
	  X_____X,
	  X_____X,
	  X_____X,
	  _XXXXX_, }, // D : 0x44

	{ XXXXXXX,
	  X__X__X,
	  X__X__X,
	  X__X__X,
	  X_____X, }, // E : 0x45

	{ XXXXXXX,
	  ___X__X,
	  ___X__X,
	  ___X__X,
	  ______X, }, // F : 0x46

	{ _XXXXX_,
	  X_____X,
	  X__X__X,
	  X__X__X,
	  _XXX_X_, }, // G : 0x47

	{ XXXXXXX,
	  ___X___,
	  ___X___,
	  ___X___,
	  XXXXXXX, }, // H : 0x48

	{ _______,
	  X_____X,
	  XXXXXXX,
	  X_____X,
	  _______, }, // I : 0x49

	{ _X_____,
	  X______,
	  X_____X,
	  _XXXXXX,
	  ______X, }, // J : 0x4A

	{ XXXXXXX,
	  ___X___,
	  ___X___,
	  __X_X__,
	  XX___XX, }, // K : 0x4B

	{ XXXXXXX,
	  X______,
	  X______,
	  X______,
	  X______, }, // L : 0x4C

	{ XXXXXXX,
	  _____X_,
	  ____X__,
	  _____X_,
	  XXXXXXX, }, // M : 0x4D

	{ XXXXXXX,
	  ____X__,
	  ___X___,
	  __X____,
	  XXXXXXX, }, // N : 0x4E

	{ _XXXXX_,
	  X_____X,
	  X_____X,
	  X_____X,
	  _XXXXX_, }, // O : 0x4F

	{ XXXXXXX,
	  ___X__X,
	  ___X__X,
	  ___X__X,
	  ____XX_, }, // P : 0x50

	{ _XXXXX_,
	  X_____X,
	  X_X___X,
	  XX____X,
	  _XXXXX_, }, // Q : 0x51

	{ XXXXXXX,
	  ___X__X,
	  ___X__X,
	  __XX__X,
	  XX__XX_, }, // R : 0x52

	{ _X__XX_,
	  X__X__X,
	  X__X__X,
	  X__X__X,
	  _XX__X_, }, // S : 0x53

	{ ______X,
	  ______X,
	  XXXXXXX,
	  ______X,
	  ______X, }, // T : 0x54

	{ _XXXXXX,
	  X______,
	  X______,
	  X______,
	  _XXXXXX, }, // U : 0x55

	{ __XXXXX,
	  _X_____,
	  X______,
	  _X_____,
	  __XXXXX, }, // V : 0x56

	{ XXXXXXX,
	  _X_____,
	  __X____,
	  _X_____,
	  XXXXXXX, }, // W : 0x57

	{ XX___XX,
	  __X_X__,
	  ___X___,
	  __X_X__,
	  XX___XX, }, // X : 0x58

	{ _____XX,
	  ____X__,
	  XXXX___,
	  ____X__,
	  _____XX, }, // Y : 0x59

	{ XX____X,
	  X_X___X,
	  X__X__X,
	  X___X_X,
	  X____XX, }, // Z : 0x5A

	{ _______,
	  XXXXXXX,
	  X_____X,
	  X_____X,
	  _______, }, // [ : 0x5B

	{ _____X_,
	  ____X__,
	  ___X___,
	  __X____,
	  _X_____, }, // \ : 0x5C

	{ _______,
	  X_____X,
	  X_____X,
	  XXXXXXX,
	  _______, }, // ] : 0x5D

	{ ____X__,
	  _____X_,
	  ______X,
	  _____X_,
	  ____X__, }, // ^ : 0x5E

	{ X______,
	  X______,
	  X______,
	  X______,
	  X______, }, // _ : 0x5F

	{ _______,
	  ______X,
	  _____X_,
	  _______,
	  _______, }, // ` : 0x60

	{ _XX____,
	  X__X___,
	  X__X___,
	  _XX____,
	  X______, }, // a : 0x61

	{ XXXXXX_,
	  X__X___,
	  X__X___,
	  X__X___,
	  _XX____, }, // b : 0x62

	{ _XX____,
	  X__X___,
	  X__X___,
	  X__X___,
	  X__X___, }, // c : 0x63

	{ _XX____,
	  X__X___,
	  X__X___,
	  X__X___,
	  XXXXXX_, }, // d : 0x64

	{ _XXX___,
	  X_X_X__,
	  X_X_X__,
	  X_X_X__,
	  X__X___, }, // e : 0x65

	{ __X____,
	  XXXXXX_,
	  __X___X,
	  __X__X_,
	  _______, }, // f : 0x66

	{ ___XX__,
	  X_X__X_,
	  X_X__X_,
	  X_X__X_,
	  _XXXX__, }, // g : 0x67

	{ XXXXXX_,
	  ___X___,
	  ___X___,
	  ___X___,
	  XXX____, }, // h : 0x68

	{ _______,
	  _______,
	  XXX_X__,
	  _______,
	  _______, }, // i : 0x69

	{ _______,
	  _X_____,
	  X______,
	  _XXX_X_,
	  _______, }, // j : 0x6A

	{ XXXXXX_,
	  __X____,
	  __X____,
	  _X_X___,
	  X___X__, }, // k : 0x6B

	{ _______,
	  XXXXXX_,
	  _______,
	  _______,
	  _______, }, // l : 0x6C

	{ XXXX___,
	  ___X___,
	  XXXX___,
	  ___X___,
	  XXX____, }, // m : 0x6D

	{ XXXX___,
	  ___X___,
	  ___X___,
	  XXX____,
	  _______, }, // n : 0x6E

	{ _XX____,
	  X__X___,
	  X__X___,
	  _XX____,
	  _______, }, // o : 0x6F

	{ _______,
	  XXXXXX_,
	  ___X_X_,
	  ___X_X_,
	  ____X__, }, // p : 0x70

	{ ____X__,
	  ___X_X_,
	  ___X_X_,
	  _XXX_X_,
	  X___X__, }, // q : 0x71

	{ _______,
	  XXXX___,
	  ___X___,
	  ___X___,
	  __X____, }, // r : 0x72

	{ _______,
	  X__X___,
	  X_X_X__,
	  X_X_X__,
	  _X__X__, }, // s : 0x73

	{ _______,
	  ___X___,
	  XXXXX__,
	  ___X___,
	  _______, }, // t : 0x74

	{ _XXX___,
	  X______,
	  X______,
	  _XXX___,
	  _______, }, // u : 0x75

	{ __XX___,
	  _X_____,
	  X______,
	  _X_____,
	  __XX___, }, // v : 0x76

	{ _XXX___,
	  X______,
	  XX_____,
	  X______,
	  _XXX___, }, // w : 0x77

	{ X___X__,
	  _X_X___,
	  __X____,
	  _X_X___,
	  X___X__, }, // x : 0x78

	{ _______,
	  X__XX__,
	  X_X____,
	  X_X____,
	  _XXXX__, }, // y : 0x79

	{ X___X__,
	  XX__X__,
	  X_X_X__,
	  X__XX__,
	  X___X__, }, // z : 0x7A

	{ _______,
	  ___X___,
	  XXX_XXX,
	  X_____X,
	  _______, }, // { : 0x7B

	{ _______,
	  _______,
	  XXXXXXX,
	  _______,
	  _______, }, // | : 0x7C

	{ _______,
	  X_____X,
	  XXX_XXX,
	  ___X___,
	  _______, }, // } : 0x7D

	{ _____X_,
	  ______X,
	  _____X_,
	  ______X,
	  _______, }, // ~ : 0x7E

	//---------------------------------------
	// non-standard
	//---------------------------------------
	{ _______,
	  _______,
	  _______,
	  _______,
	  _______, }, // empty : 0x7F

 	{ _______,
	  _______,
	  _X_____,
	  XXXXXXX,
	  _X_____, }, //    : 0x80

	{ ___X___,
	  __XXX__,
	  _X_X___,
	  XXXXXXX,
	  _X_____, }, // E0 : 0x81

	{ _______,
	  _______,
	  _____X_,
	  XXXXXXX,
	  _____X_, }, // F0 : 0x82

	{ ___X___,
	  __XXX__,
	  ___X_X_,
	  XXXXXXX,
	  _____X_, }, // E0F0 : 0x83

};


void InitGlyphs(void) {
	// does nothing
}

unsigned short GetGlyphColumn(char c, unsigned short i) {
	return glyphs[c-GLYPH_OFFSET][i];
}

#endif